﻿#region Using
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
#endregion

namespace RubikSolve {
    abstract class Screen {
        protected ContentManager Content;
        protected GraphicsDeviceManager graphics;
        public RubikSolver game;

        /// <summary>
        /// Unused constructor
        /// </summary>
        public Screen() {

        }
        /// <summary>
        /// Main usable contructor
        /// </summary>
        /// <param name="game"></param>
        public Screen(RubikSolver game) {
            this.game = game;
            this.Content = game.Content;
            this.Content.RootDirectory = "Content";
            this.graphics = game.graphics;
        }
        /// <summary>
        /// Initialize everything in this current screen
        /// </summary>
        public abstract void init();
        /// <summary>
        /// Update the current screen logic and background process, doesn't care about drawing
        /// </summary>
        public abstract void update();
        /// <summary>
        /// Draw current screen, based on logic and background process during update()
        /// </summary>
        public abstract void present();
        /// <summary>
        /// Load all current screen assets
        /// </summary>
        public abstract void loadAssets();
        /// <summary>
        /// Dispose all desirable assets
        /// </summary>
        public abstract void disposeAssets();
    }
}
